/**
 * vue-resource v0.7.0
 * https://github.com/vuejs/vue-resource
 * Released under the MIT License.
 */

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory();
    else if(typeof define === 'function' && define.amd)
        define([], factory);
    else if(typeof exports === 'object')
        exports["VueResource"] = factory();
    else
        root["VueResource"] = factory();
})(this, function() {
    return /******/ (function(modules) { // webpackBootstrap
        /******/ 	// The module cache
        /******/ 	var installedModules = {};

        /******/ 	// The require function
        /******/ 	function __webpack_require__(moduleId) {

            /******/ 		// Check if module is in cache
            /******/ 		if(installedModules[moduleId])
            /******/ 			return installedModules[moduleId].exports;

            /******/ 		// Create a new module (and put it into the cache)
            /******/ 		var module = installedModules[moduleId] = {
                /******/ 			exports: {},
                /******/ 			id: moduleId,
                /******/ 			loaded: false
                /******/ 		};

            /******/ 		// Execute the module function
            /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

            /******/ 		// Flag the module as loaded
            /******/ 		module.loaded = true;

            /******/ 		// Return the exports of the module
            /******/ 		return module.exports;
            /******/ 	}


        /******/ 	// expose the modules object (__webpack_modules__)
        /******/ 	__webpack_require__.m = modules;

        /******/ 	// expose the module cache
        /******/ 	__webpack_require__.c = installedModules;

        /******/ 	// __webpack_public_path__
        /******/ 	__webpack_require__.p = "";

        /******/ 	// Load entry module and return exports
        /******/ 	return __webpack_require__(0);
        /******/ })
    /************************************************************************/
    /******/ ([
        /* 0 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Install plugin.
             */

            function install(Vue) {

                var _ = __webpack_require__(1);

                _.config = Vue.config;
                _.warning = Vue.util.warn;
                _.nextTick = Vue.util.nextTick;

                Vue.url = __webpack_require__(2);
                Vue.http = __webpack_require__(8);
                Vue.resource = __webpack_require__(23);
                Vue.Promise = __webpack_require__(10);

                Object.defineProperties(Vue.prototype, {

                    $url: {
                        get: function () {
                            return _.options(Vue.url, this, this.$options.url);
                        }
                    },

                    $http: {
                        get: function () {
                            return _.options(Vue.http, this, this.$options.http);
                        }
                    },

                    $resource: {
                        get: function () {
                            return Vue.resource.bind(this);
                        }
                    },

                    $promise: {
                        get: function () {
                            return function (executor) {
                                return new Vue.Promise(executor, this);
                            }.bind(this);
                        }
                    }

                });
            }

            if (window.Vue) {
                Vue.use(install);
            }

            module.exports = install;


            /***/ },
        /* 1 */
        /***/ function(module, exports) {

            /**
             * Utility functions.
             */

            var _ = exports, array = [], console = window.console;

            _.warn = function (msg) {
                if (console && _.warning && (!_.config.silent || _.config.debug)) {
                    console.warn('[VueResource warn]: ' + msg);
                }
            };

            _.error = function (msg) {
                if (console) {
                    console.error(msg);
                }
            };

            _.trim = function (str) {
                return str.replace(/^\s*|\s*$/g, '');
            };

            _.toLower = function (str) {
                return str ? str.toLowerCase() : '';
            };

            _.isArray = Array.isArray;

            _.isString = function (val) {
                return typeof val === 'string';
            };

            _.isFunction = function (val) {
                return typeof val === 'function';
            };

            _.isObject = function (obj) {
                return obj !== null && typeof obj === 'object';
            };

            _.isPlainObject = function (obj) {
                return _.isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;
            };

            _.options = function (fn, obj, options) {

                options = options || {};

                if (_.isFunction(options)) {
                    options = options.call(obj);
                }

                return _.merge(fn.bind({$vm: obj, $options: options}), fn, {$options: options});
            };

            _.each = function (obj, iterator) {

                var i, key;

                if (typeof obj.length == 'number') {
                    for (i = 0; i < obj.length; i++) {
                        iterator.call(obj[i], obj[i], i);
                    }
                } else if (_.isObject(obj)) {
                    for (key in obj) {
                        if (obj.hasOwnProperty(key)) {
                            iterator.call(obj[key], obj[key], key);
                        }
                    }
                }

                return obj;
            };

            _.defaults = function (target, source) {

                for (var key in source) {
                    if (target[key] === undefined) {
                        target[key] = source[key];
                    }
                }

                return target;
            };

            _.extend = function (target) {

                var args = array.slice.call(arguments, 1);

                args.forEach(function (arg) {
                    merge(target, arg);
                });

                return target;
            };

            _.merge = function (target) {

                var args = array.slice.call(arguments, 1);

                args.forEach(function (arg) {
                    merge(target, arg, true);
                });

                return target;
            };

            function merge(target, source, deep) {
                for (var key in source) {
                    if (deep && (_.isPlainObject(source[key]) || _.isArray(source[key]))) {
                        if (_.isPlainObject(source[key]) && !_.isPlainObject(target[key])) {
                            target[key] = {};
                        }
                        if (_.isArray(source[key]) && !_.isArray(target[key])) {
                            target[key] = [];
                        }
                        merge(target[key], source[key], deep);
                    } else if (source[key] !== undefined) {
                        target[key] = source[key];
                    }
                }
            }


            /***/ },
        /* 2 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Service for URL templating.
             */

            var _ = __webpack_require__(1);
            var ie = document.documentMode;
            var el = document.createElement('a');

            function Url(url, params) {

                var options = url, transform;

                if (_.isString(url)) {
                    options = {url: url, params: params};
                }

                options = _.merge({}, Url.options, this.$options, options);

                Url.transforms.forEach(function (handler) {
                    transform = factory(handler, transform, this.$vm);
                }, this);

                return transform(options);
            };

            /**
             * Url options.
             */

            Url.options = {
                url: '',
                root: null,
                params: {}
            };

            /**
             * Url transforms.
             */

            Url.transforms = [
                __webpack_require__(3),
                __webpack_require__(5),
                __webpack_require__(6),
                __webpack_require__(7)
            ];

            /**
             * Encodes a Url parameter string.
             *
             * @param {Object} obj
             */

            Url.params = function (obj) {

                var params = [], escape = encodeURIComponent;

                params.add = function (key, value) {

                    if (_.isFunction(value)) {
                        value = value();
                    }

                    if (value === null) {
                        value = '';
                    }

                    this.push(escape(key) + '=' + escape(value));
                };

                serialize(params, obj);

                return params.join('&').replace(/%20/g, '+');
            };

            /**
             * Parse a URL and return its components.
             *
             * @param {String} url
             */

            Url.parse = function (url) {

                if (ie) {
                    el.href = url;
                    url = el.href;
                }

                el.href = url;

                return {
                    href: el.href,
                    protocol: el.protocol ? el.protocol.replace(/:$/, '') : '',
                    port: el.port,
                    host: el.host,
                    hostname: el.hostname,
                    pathname: el.pathname.charAt(0) === '/' ? el.pathname : '/' + el.pathname,
                    search: el.search ? el.search.replace(/^\?/, '') : '',
                    hash: el.hash ? el.hash.replace(/^#/, '') : ''
                };
            };

            function factory(handler, next, vm) {
                return function (options) {
                    return handler.call(vm, options, next);
                };
            }

            function serialize(params, obj, scope) {

                var array = _.isArray(obj), plain = _.isPlainObject(obj), hash;

                _.each(obj, function (value, key) {

                    hash = _.isObject(value) || _.isArray(value);

                    if (scope) {
                        key = scope + '[' + (plain || hash ? key : '') + ']';
                    }

                    if (!scope && array) {
                        params.add(value.name, value.value);
                    } else if (hash) {
                        serialize(params, value, key);
                    } else {
                        params.add(key, value);
                    }
                });
            }

            module.exports = _.url = Url;


            /***/ },
        /* 3 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * URL Template (RFC 6570) Transform.
             */

            var UrlTemplate = __webpack_require__(4);

            module.exports = function (options) {

                var variables = [], url = UrlTemplate.expand(options.url, options.params, variables);

                variables.forEach(function (key) {
                    delete options.params[key];
                });

                return url;
            };


            /***/ },
        /* 4 */
        /***/ function(module, exports) {

            /**
             * URL Template v2.0.6 (https://github.com/bramstein/url-template)
             */

            exports.expand = function (url, params, variables) {

                var tmpl = this.parse(url), expanded = tmpl.expand(params);

                if (variables) {
                    variables.push.apply(variables, tmpl.vars);
                }

                return expanded;
            };

            exports.parse = function (template) {

                var operators = ['+', '#', '.', '/', ';', '?', '&'], variables = [];

                return {
                    vars: variables,
                    expand: function (context) {
                        return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
                            if (expression) {

                                var operator = null, values = [];

                                if (operators.indexOf(expression.charAt(0)) !== -1) {
                                    operator = expression.charAt(0);
                                    expression = expression.substr(1);
                                }

                                expression.split(/,/g).forEach(function (variable) {
                                    var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
                                    values.push.apply(values, exports.getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
                                    variables.push(tmp[1]);
                                });

                                if (operator && operator !== '+') {

                                    var separator = ',';

                                    if (operator === '?') {
                                        separator = '&';
                                    } else if (operator !== '#') {
                                        separator = operator;
                                    }

                                    return (values.length !== 0 ? operator : '') + values.join(separator);
                                } else {
                                    return values.join(',');
                                }

                            } else {
                                return exports.encodeReserved(literal);
                            }
                        });
                    }
                };
            };

            exports.getValues = function (context, operator, key, modifier) {

                var value = context[key], result = [];

                if (this.isDefined(value) && value !== '') {
                    if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
                        value = value.toString();

                        if (modifier && modifier !== '*') {
                            value = value.substring(0, parseInt(modifier, 10));
                        }

                        result.push(this.encodeValue(operator, value, this.isKeyOperator(operator) ? key : null));
                    } else {
                        if (modifier === '*') {
                            if (Array.isArray(value)) {
                                value.filter(this.isDefined).forEach(function (value) {
                                    result.push(this.encodeValue(operator, value, this.isKeyOperator(operator) ? key : null));
                                }, this);
                            } else {
                                Object.keys(value).forEach(function (k) {
                                    if (this.isDefined(value[k])) {
                                        result.push(this.encodeValue(operator, value[k], k));
                                    }
                                }, this);
                            }
                        } else {
                            var tmp = [];

                            if (Array.isArray(value)) {
                                value.filter(this.isDefined).forEach(function (value) {
                                    tmp.push(this.encodeValue(operator, value));
                                }, this);
                            } else {
                                Object.keys(value).forEach(function (k) {
                                    if (this.isDefined(value[k])) {
                                        tmp.push(encodeURIComponent(k));
                                        tmp.push(this.encodeValue(operator, value[k].toString()));
                                    }
                                }, this);
                            }

                            if (this.isKeyOperator(operator)) {
                                result.push(encodeURIComponent(key) + '=' + tmp.join(','));
                            } else if (tmp.length !== 0) {
                                result.push(tmp.join(','));
                            }
                        }
                    }
                } else {
                    if (operator === ';') {
                        result.push(encodeURIComponent(key));
                    } else if (value === '' && (operator === '&' || operator === '?')) {
                        result.push(encodeURIComponent(key) + '=');
                    } else if (value === '') {
                        result.push('');
                    }
                }

                return result;
            };

            exports.isDefined = function (value) {
                return value !== undefined && value !== null;
            };

            exports.isKeyOperator = function (operator) {
                return operator === ';' || operator === '&' || operator === '?';
            };

            exports.encodeValue = function (operator, value, key) {

                value = (operator === '+' || operator === '#') ? this.encodeReserved(value) : encodeURIComponent(value);

                if (key) {
                    return encodeURIComponent(key) + '=' + value;
                } else {
                    return value;
                }
            };

            exports.encodeReserved = function (str) {
                return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
                    if (!/%[0-9A-Fa-f]/.test(part)) {
                        part = encodeURI(part);
                    }
                    return part;
                }).join('');
            };


            /***/ },
        /* 5 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Legacy Transform.
             */

            var _ = __webpack_require__(1);

            module.exports = function (options, next) {

                var variables = [], url = next(options);

                url = url.replace(/(\/?):([a-z]\w*)/gi, function (match, slash, name) {

                    _.warn('The `:' + name + '` parameter syntax has been deprecated. Use the `{' + name + '}` syntax instead.');

                    if (options.params[name]) {
                        variables.push(name);
                        return slash + encodeUriSegment(options.params[name]);
                    }

                    return '';
                });

                variables.forEach(function (key) {
                    delete options.params[key];
                });

                return url;
            };

            function encodeUriSegment(value) {

                return encodeUriQuery(value, true).
                replace(/%26/gi, '&').
                replace(/%3D/gi, '=').
                replace(/%2B/gi, '+');
            }

            function encodeUriQuery(value, spaces) {

                return encodeURIComponent(value).
                replace(/%40/gi, '@').
                replace(/%3A/gi, ':').
                replace(/%24/g, '$').
                replace(/%2C/gi, ',').
                replace(/%20/g, (spaces ? '%20' : '+'));
            }


            /***/ },
        /* 6 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Query Parameter Transform.
             */

            var _ = __webpack_require__(1);

            module.exports = function (options, next) {

                var urlParams = Object.keys(_.url.options.params), query = {}, url = next(options);

                _.each(options.params, function (value, key) {
                    if (urlParams.indexOf(key) === -1) {
                        query[key] = value;
                    }
                });

                query = _.url.params(query);

                if (query) {
                    url += (url.indexOf('?') == -1 ? '?' : '&') + query;
                }

                return url;
            };


            /***/ },
        /* 7 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Root Prefix Transform.
             */

            var _ = __webpack_require__(1);

            module.exports = function (options, next) {

                var url = next(options);

                if (_.isString(options.root) && !url.match(/^(https?:)?\//)) {
                    url = options.root + '/' + url;
                }

                return url;
            };


            /***/ },
        /* 8 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Service for sending network requests.
             */

            var _ = __webpack_require__(1);
            var Client = __webpack_require__(9);
            var Promise = __webpack_require__(10);
            var interceptor = __webpack_require__(13);
            var jsonType = {'Content-Type': 'application/json'};

            function Http(url, options) {

                var client = Client, request, promise;

                Http.interceptors.forEach(function (handler) {
                    client = interceptor(handler, this.$vm)(client);
                }, this);

                options = _.isObject(url) ? url : _.extend({url: url}, options);
                request = _.merge({}, Http.options, this.$options, options);
                promise = client(request).bind(this.$vm).then(function (response) {

                    return response.ok ? response : Promise.reject(response);

                }, function (response) {

                    if (response instanceof Error) {
                        _.error(response);
                    }

                    return Promise.reject(response);
                });

                if (request.success) {
                    promise.success(request.success);
                }

                if (request.error) {
                    promise.error(request.error);
                }

                return promise;
            }

            Http.options = {
                method: 'get',
                data: '',
                params: {},
                headers: {},
                xhr: null,
                upload: null,
                jsonp: 'callback',
                beforeSend: null,
                crossOrigin: null,
                emulateHTTP: false,
                emulateJSON: false,
                timeout: 0
            };

            Http.interceptors = [
                __webpack_require__(14),
                __webpack_require__(15),
                __webpack_require__(16),
                __webpack_require__(18),
                __webpack_require__(19),
                __webpack_require__(20),
                __webpack_require__(21)
            ];

            Http.headers = {
                put: jsonType,
                post: jsonType,
                patch: jsonType,
                delete: jsonType,
                common: {'Accept': 'application/json, text/plain, */*'},
                custom: {'X-Requested-With': 'XMLHttpRequest'}
            };

            ['get', 'put', 'post', 'patch', 'delete', 'jsonp'].forEach(function (method) {

                Http[method] = function (url, data, success, options) {

                    if (_.isFunction(data)) {
                        options = success;
                        success = data;
                        data = undefined;
                    }

                    if (_.isObject(success)) {
                        options = success;
                        success = undefined;
                    }

                    return this(url, _.extend({method: method, data: data, success: success}, options));
                };
            });

            module.exports = _.http = Http;


            /***/ },
        /* 9 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Base client.
             */

            var _ = __webpack_require__(1);
            var Promise = __webpack_require__(10);
            var xhrClient = __webpack_require__(12);

            module.exports = function (request) {

                var response = (request.client || xhrClient)(request);

                return Promise.resolve(response).then(function (response) {

                    if (response.headers) {

                        var headers = parseHeaders(response.headers);

                        response.headers = function (name) {

                            if (name) {
                                return headers[_.toLower(name)];
                            }

                            return headers;
                        };

                    }

                    response.ok = response.status >= 200 && response.status < 300;

                    return response;
                });

            };

            function parseHeaders(str) {

                var headers = {}, value, name, i;

                if (_.isString(str)) {
                    _.each(str.split('\n'), function (row) {

                        i = row.indexOf(':');
                        name = _.trim(_.toLower(row.slice(0, i)));
                        value = _.trim(row.slice(i + 1));

                        if (headers[name]) {

                            if (_.isArray(headers[name])) {
                                headers[name].push(value);
                            } else {
                                headers[name] = [headers[name], value];
                            }

                        } else {

                            headers[name] = value;
                        }

                    });
                }

                return headers;
            }


            /***/ },
        /* 10 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Promise adapter.
             */

            var _ = __webpack_require__(1);
            var PromiseObj = window.Promise || __webpack_require__(11);

            function Promise(executor, context) {

                if (executor instanceof PromiseObj) {
                    this.promise = executor;
                } else {
                    this.promise = new PromiseObj(executor.bind(context));
                }

                this.context = context;
            }

            Promise.all = function (iterable, context) {
                return new Promise(PromiseObj.all(iterable), context);
            };

            Promise.resolve = function (value, context) {
                return new Promise(PromiseObj.resolve(value), context);
            };

            Promise.reject = function (reason, context) {
                return new Promise(PromiseObj.reject(reason), context);
            };

            Promise.race = function (iterable, context) {
                return new Promise(PromiseObj.race(iterable), context);
            };

            var p = Promise.prototype;

            p.bind = function (context) {
                this.context = context;
                return this;
            };

            p.then = function (fulfilled, rejected) {

                if (fulfilled && fulfilled.bind && this.context) {
                    fulfilled = fulfilled.bind(this.context);
                }

                if (rejected && rejected.bind && this.context) {
                    rejected = rejected.bind(this.context);
                }

                this.promise = this.promise.then(fulfilled, rejected);

                return this;
            };

            p.catch = function (rejected) {

                if (rejected && rejected.bind && this.context) {
                    rejected = rejected.bind(this.context);
                }

                this.promise = this.promise.catch(rejected);

                return this;
            };

            p.finally = function (callback) {

                return this.then(function (value) {
                        callback.call(this);
                        return value;
                    }, function (reason) {
                        callback.call(this);
                        return PromiseObj.reject(reason);
                    }
                );
            };

            p.success = function (callback) {

                _.warn('The `success` method has been deprecated. Use the `then` method instead.');

                return this.then(function (response) {
                    return callback.call(this, response.data, response.status, response) || response;
                });
            };

            p.error = function (callback) {

                _.warn('The `error` method has been deprecated. Use the `catch` method instead.');

                return this.catch(function (response) {
                    return callback.call(this, response.data, response.status, response) || response;
                });
            };

            p.always = function (callback) {

                _.warn('The `always` method has been deprecated. Use the `finally` method instead.');

                var cb = function (response) {
                    return callback.call(this, response.data, response.status, response) || response;
                };

                return this.then(cb, cb);
            };

            module.exports = Promise;


            /***/ },
        /* 11 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)
             */

            var _ = __webpack_require__(1);

            var RESOLVED = 0;
            var REJECTED = 1;
            var PENDING  = 2;

            function Promise(executor) {

                this.state = PENDING;
                this.value = undefined;
                this.deferred = [];

                var promise = this;

                try {
                    executor(function (x) {
                        promise.resolve(x);
                    }, function (r) {
                        promise.reject(r);
                    });
                } catch (e) {
                    promise.reject(e);
                }
            }

            Promise.reject = function (r) {
                return new Promise(function (resolve, reject) {
                    reject(r);
                });
            };

            Promise.resolve = function (x) {
                return new Promise(function (resolve, reject) {
                    resolve(x);
                });
            };

            Promise.all = function all(iterable) {
                return new Promise(function (resolve, reject) {
                    var count = 0, result = [];

                    if (iterable.length === 0) {
                        resolve(result);
                    }

                    function resolver(i) {
                        return function (x) {
                            result[i] = x;
                            count += 1;

                            if (count === iterable.length) {
                                resolve(result);
                            }
                        };
                    }

                    for (var i = 0; i < iterable.length; i += 1) {
                        Promise.resolve(iterable[i]).then(resolver(i), reject);
                    }
                });
            };

            Promise.race = function race(iterable) {
                return new Promise(function (resolve, reject) {
                    for (var i = 0; i < iterable.length; i += 1) {
                        Promise.resolve(iterable[i]).then(resolve, reject);
                    }
                });
            };

            var p = Promise.prototype;

            p.resolve = function resolve(x) {
                var promise = this;

                if (promise.state === PENDING) {
                    if (x === promise) {
                        throw new TypeError('Promise settled with itself.');
                    }

                    var called = false;

                    try {
                        var then = x && x['then'];

                        if (x !== null && typeof x === 'object' && typeof then === 'function') {
                            then.call(x, function (x) {
                                if (!called) {
                                    promise.resolve(x);
                                }
                                called = true;

                            }, function (r) {
                                if (!called) {
                                    promise.reject(r);
                                }
                                called = true;
                            });
                            return;
                        }
                    } catch (e) {
                        if (!called) {
                            promise.reject(e);
                        }
                        return;
                    }

                    promise.state = RESOLVED;
                    promise.value = x;
                    promise.notify();
                }
            };

            p.reject = function reject(reason) {
                var promise = this;

                if (promise.state === PENDING) {
                    if (reason === promise) {
                        throw new TypeError('Promise settled with itself.');
                    }

                    promise.state = REJECTED;
                    promise.value = reason;
                    promise.notify();
                }
            };

            p.notify = function notify() {
                var promise = this;

                _.nextTick(function () {
                    if (promise.state !== PENDING) {
                        while (promise.deferred.length) {
                            var deferred = promise.deferred.shift(),
                                onResolved = deferred[0],
                                onRejected = deferred[1],
                                resolve = deferred[2],
                                reject = deferred[3];

                            try {
                                if (promise.state === RESOLVED) {
                                    if (typeof onResolved === 'function') {
                                        resolve(onResolved.call(undefined, promise.value));
                                    } else {
                                        resolve(promise.value);
                                    }
                                } else if (promise.state === REJECTED) {
                                    if (typeof onRejected === 'function') {
                                        resolve(onRejected.call(undefined, promise.value));
                                    } else {
                                        reject(promise.value);
                                    }
                                }
                            } catch (e) {
                                reject(e);
                            }
                        }
                    }
                });
            };

            p.then = function then(onResolved, onRejected) {
                var promise = this;

                return new Promise(function (resolve, reject) {
                    promise.deferred.push([onResolved, onRejected, resolve, reject]);
                    promise.notify();
                });
            };

            p.catch = function (onRejected) {
                return this.then(undefined, onRejected);
            };

            module.exports = Promise;


            /***/ },
        /* 12 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * XMLHttp client.
             */

            var _ = __webpack_require__(1);
            var Promise = __webpack_require__(10);

            module.exports = function (request) {
                return new Promise(function (resolve) {

                    var xhr = new XMLHttpRequest(), response = {request: request}, handler;

                    request.cancel = function () {
                        xhr.abort();
                    };

                    xhr.open(request.method, _.url(request), true);

                    handler = function (event) {

                        response.data = xhr.responseText;
                        response.status = xhr.status;
                        response.statusText = xhr.statusText;
                        response.headers = xhr.getAllResponseHeaders();

                        resolve(response);
                    };

                    xhr.timeout = 0;
                    xhr.onload = handler;
                    xhr.onabort = handler;
                    xhr.onerror = handler;
                    xhr.ontimeout = function () {};
                    xhr.onprogress = function () {};

                    if (_.isPlainObject(request.xhr)) {
                        _.extend(xhr, request.xhr);
                    }

                    if (_.isPlainObject(request.upload)) {
                        _.extend(xhr.upload, request.upload);
                    }

                    _.each(request.headers || {}, function (value, header) {
                        xhr.setRequestHeader(header, value);
                    });

                    xhr.send(request.data);
                });
            };


            /***/ },
        /* 13 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Interceptor factory.
             */

            var _ = __webpack_require__(1);
            var Promise = __webpack_require__(10);

            module.exports = function (handler, vm) {

                return function (client) {

                    if (_.isFunction(handler)) {
                        handler = handler.call(vm, Promise);
                    }

                    return function (request) {

                        if (_.isFunction(handler.request)) {
                            request = handler.request.call(vm, request);
                        }

                        return when(request, function (request) {
                            return when(client(request), function (response) {

                                if (_.isFunction(handler.response)) {
                                    response = handler.response.call(vm, response);
                                }

                                return response;
                            });
                        });
                    };
                };
            };

            function when(value, fulfilled, rejected) {

                var promise = Promise.resolve(value);

                if (arguments.length < 2) {
                    return promise;
                }

                return promise.then(fulfilled, rejected);
            }


            /***/ },
        /* 14 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Before Interceptor.
             */

            var _ = __webpack_require__(1);

            module.exports = {

                request: function (request) {

                    if (_.isFunction(request.beforeSend)) {
                        request.beforeSend.call(this, request);
                    }

                    return request;
                }

            };


            /***/ },
        /* 15 */
        /***/ function(module, exports) {

            /**
             * Timeout Interceptor.
             */

            module.exports = function () {

                var timeout;

                return {

                    request: function (request) {

                        if (request.timeout) {
                            timeout = setTimeout(function () {
                                request.cancel();
                            }, request.timeout);
                        }

                        return request;
                    },

                    response: function (response) {

                        clearTimeout(timeout);

                        return response;
                    }

                };
            };


            /***/ },
        /* 16 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * JSONP Interceptor.
             */

            var jsonpClient = __webpack_require__(17);

            module.exports = {

                request: function (request) {

                    if (request.method == 'JSONP') {
                        request.client = jsonpClient;
                    }

                    return request;
                }

            };


            /***/ },
        /* 17 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * JSONP client.
             */

            var _ = __webpack_require__(1);
            var Promise = __webpack_require__(10);

            module.exports = function (request) {
                return new Promise(function (resolve) {

                    var callback = '_jsonp' + Math.random().toString(36).substr(2), response = {request: request, data: null}, handler, script;

                    request.params[request.jsonp] = callback;
                    request.cancel = function () {
                        handler({type: 'cancel'});
                    };

                    script = document.createElement('script');
                    script.src = _.url(request);
                    script.type = 'text/javascript';
                    script.async = true;

                    window[callback] = function (data) {
                        response.data = data;
                    };

                    handler = function (event) {

                        if (event.type === 'load' && response.data !== null) {
                            response.status = 200;
                        } else if (event.type === 'error') {
                            response.status = 404;
                        } else {
                            response.status = 0;
                        }

                        resolve(response);

                        delete window[callback];
                        document.body.removeChild(script);
                    };

                    script.onload = handler;
                    script.onerror = handler;

                    document.body.appendChild(script);
                });
            };


            /***/ },
        /* 18 */
        /***/ function(module, exports) {

            /**
             * HTTP method override Interceptor.
             */

            module.exports = {

                request: function (request) {

                    if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) {
                        request.headers['X-HTTP-Method-Override'] = request.method;
                        request.method = 'POST';
                    }

                    return request;
                }

            };


            /***/ },
        /* 19 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Mime Interceptor.
             */

            var _ = __webpack_require__(1);

            module.exports = {

                request: function (request) {

                    if (request.emulateJSON && _.isPlainObject(request.data)) {
                        request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
                        request.data = _.url.params(request.data);
                    }

                    if (_.isObject(request.data) && /FormData/i.test(request.data.toString())) {
                        delete request.headers['Content-Type'];
                    }

                    if (_.isPlainObject(request.data)) {
                        request.data = JSON.stringify(request.data);
                    }

                    return request;
                },

                response: function (response) {

                    try {
                        response.data = JSON.parse(response.data);
                    } catch (e) {}

                    return response;
                }

            };


            /***/ },
        /* 20 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Header Interceptor.
             */

            var _ = __webpack_require__(1);

            module.exports = {

                request: function (request) {

                    request.method = request.method.toUpperCase();
                    request.headers = _.extend({}, _.http.headers.common,
                        !request.crossOrigin ? _.http.headers.custom : {},
                        _.http.headers[request.method.toLowerCase()],
                        request.headers
                    );

                    if (_.isPlainObject(request.data) && /^(GET|JSONP)$/i.test(request.method)) {
                        _.extend(request.params, request.data);
                        delete request.data;
                    }

                    return request;
                }

            };


            /***/ },
        /* 21 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * CORS Interceptor.
             */

            var _ = __webpack_require__(1);
            var xdrClient = __webpack_require__(22);
            var xhrCors = 'withCredentials' in new XMLHttpRequest();
            var originUrl = _.url.parse(location.href);

            module.exports = {

                request: function (request) {

                    if (request.crossOrigin === null) {
                        request.crossOrigin = crossOrigin(request);
                    }

                    if (request.crossOrigin) {

                        if (!xhrCors) {
                            request.client = xdrClient;
                        }

                        request.emulateHTTP = false;
                    }

                    return request;
                }

            };

            function crossOrigin(request) {

                var requestUrl = _.url.parse(_.url(request));

                return (requestUrl.protocol !== originUrl.protocol || requestUrl.host !== originUrl.host);
            }


            /***/ },
        /* 22 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * XDomain client (Internet Explorer).
             */

            var _ = __webpack_require__(1);
            var Promise = __webpack_require__(10);

            module.exports = function (request) {
                return new Promise(function (resolve) {

                    var xdr = new XDomainRequest(), response = {request: request}, handler;

                    request.cancel = function () {
                        xdr.abort();
                    };

                    xdr.open(request.method, _.url(request), true);

                    handler = function (event) {

                        response.data = xdr.responseText;
                        response.status = xdr.status;
                        response.statusText = xdr.statusText;

                        resolve(response);
                    };

                    xdr.timeout = 0;
                    xdr.onload = handler;
                    xdr.onabort = handler;
                    xdr.onerror = handler;
                    xdr.ontimeout = function () {};
                    xdr.onprogress = function () {};

                    xdr.send(request.data);
                });
            };


            /***/ },
        /* 23 */
        /***/ function(module, exports, __webpack_require__) {

            /**
             * Service for interacting with RESTful services.
             */

            var _ = __webpack_require__(1);

            function Resource(url, params, actions, options) {

                var self = this, resource = {};

                actions = _.extend({},
                    Resource.actions,
                    actions
                );

                _.each(actions, function (action, name) {

                    action = _.merge({url: url, params: params || {}}, options, action);

                    resource[name] = function () {
                        return (self.$http || _.http)(opts(action, arguments));
                    };
                });

                return resource;
            }

            function opts(action, args) {

                var options = _.extend({}, action), params = {}, data, success, error;

                switch (args.length) {

                    case 4:

                        error = args[3];
                        success = args[2];

                    case 3:
                    case 2:

                        if (_.isFunction(args[1])) {

                            if (_.isFunction(args[0])) {

                                success = args[0];
                                error = args[1];

                                break;
                            }

                            success = args[1];
                            error = args[2];

                        } else {

                            params = args[0];
                            data = args[1];
                            success = args[2];

                            break;
                        }

                    case 1:

                        if (_.isFunction(args[0])) {
                            success = args[0];
                        } else if (/^(POST|PUT|PATCH)$/i.test(options.method)) {
                            data = args[0];
                        } else {
                            params = args[0];
                        }

                        break;

                    case 0:

                        break;

                    default:

                        throw 'Expected up to 4 arguments [params, data, success, error], got ' + args.length + ' arguments';
                }

                options.data = data;
                options.params = _.extend({}, options.params, params);

                if (success) {
                    options.success = success;
                }

                if (error) {
                    options.error = error;
                }

                return options;
            }

            Resource.actions = {

                get: {method: 'GET'},
                save: {method: 'POST'},
                query: {method: 'GET'},
                update: {method: 'PUT'},
                remove: {method: 'DELETE'},
                delete: {method: 'DELETE'}

            };

            module.exports = _.resource = Resource;


            /***/ }
        /******/ ])
});
;